package com.xiaoxi.xiojcodesandbox.docker;

import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.*;
import com.github.dockerjava.api.model.Container;
import com.github.dockerjava.api.model.Frame;
import com.github.dockerjava.api.model.PullResponseItem;
import com.github.dockerjava.core.DockerClientBuilder;
import com.github.dockerjava.core.command.LogContainerResultCallback;

import java.util.List;

public class DockerDemo {

    public static void main(String[] args) throws InterruptedException {
        // 获取默认的 Docker Client
        DockerClient dockerClient = DockerClientBuilder.getInstance().build();

        String image = "nginx:latest";
        // 拉取镜像
//        PullImageCmd pullImageCmd = dockerClient.pullImageCmd(image);
//
//        PullImageResultCallback pullImageResultCallback = new PullImageResultCallback(){
//            @Override
//            public void onNext(PullResponseItem item) {
//                System.out.println("下载镜像:" + item.getStatus());
//                super.onNext(item);
//            }
//        };
//        pullImageCmd
//                .exec(pullImageResultCallback)
//                .awaitCompletion();
//
//        System.out.printf("下载完成");

        // 创建容器
//        CreateContainerCmd containerCmd = dockerClient.createContainerCmd(image);
//        CreateContainerResponse containerResponse = containerCmd.withCmd("echo", "hello docker").exec();
//        System.out.println(containerResponse);

        // 获取全部容器列表
//        ListContainersCmd listContainersCmd = dockerClient.listContainersCmd();
//        List<Container> containerList = listContainersCmd.withShowAll(true).exec();
//        System.out.println("容器列表:");
//        for (Container container : containerList) {
//            System.out.println(container);
//        }

        // 启动容器
//        dockerClient.startContainerCmd("09fc4fc38bff").exec();

        // 查看日志
        LogContainerResultCallback logContainerResultCallback = new LogContainerResultCallback(){
            @Override
            public void onNext(Frame item) {
                System.out.println("日志:" + new String(item.getPayload()));
                super.onNext(item);
            }
        };
        dockerClient
                .logContainerCmd("09fc4fc38bff")
                .withStdErr(true)
                .withStdOut(true)
                .exec(logContainerResultCallback)
                .awaitCompletion();

        // 删除容器
        dockerClient.removeContainerCmd("09fc4fc38bff").withForce(true).exec();

        // 删除镜像
        dockerClient.removeImageCmd(image).exec();
    }
}
